package com.xm.copyonwritearraylist;

import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 读多写少的配置管理
 * 使用场景：
 *   多个线程可同时读取配置（无锁），写操作通过复制新数组保证线程安全。
 *   适用于配置更新频率低但读取频率高的场景。
 */
public class ConfigManager {
    private static final CopyOnWriteArrayList<String> configList = new CopyOnWriteArrayList<>();

    static {
        // 初始化配置
        configList.add("timeout=5000");
        configList.add("max_connections=100");
    }

    // 读取配置（无需加锁）
    public static String getConfig(int index) {
        return configList.get(index);
    }

    // 更新配置（触发写时复制）
    public static void updateConfig(int index, String newValue) {
        configList.set(index, newValue);
    }

    public static void main(String[] args) {
        // 多线程并发读取配置
        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                System.out.println("Read config: " + configList.get(0));
            }).start();
        }

        // 单线程更新配置
        new Thread(() -> {
            configList.set(0, "timeout=10000");
        }).start();
    }
}